// #include "stdio.h"
#include "simple_cfsrbt.h"
#include "string.h"

#define DEFAULT_PRIORITY 1
#define DEFAULT_TICKS 4

// 初始化 myproc 结构体
void init_process(myproc *proc, u32 pid, char *p_name, int priority) {
    memset(proc, 0, sizeof(myproc)); // 清零整个结构体
    // printf("node create success\n");


    // 设置进程 ID 和名称
    proc->task.pid = pid;
    // strncpy(proc->task.p_name, p_name, sizeof(proc->task.p_name) - 1);
    proc->task.p_name = p_name; // 确保以 NULL 结尾

    // 设置优先级和剩余时间片
    proc->task.priority = priority;
    proc->task.ticks = DEFAULT_TICKS; // 假设初始化为默认时间片
    // 其他字段根据需要进行初始化...
}

int main() {
    // char* test = (char*)malloc_4k();
    // // free(test);
    // printf("malloc success\n");
    // test[0] = '1';
    // test[1] = '2';
    // test[2] = '3';
    // test[3] = 0;
    // printf("%s\n",test);
    // printf("baichen\n");

    // printf("start%d\n", sizeof(myproc));

    // malloc(1);
    // sys_malloc(1);
    // 	struct rb_root cfs_tree = RB_ROOT; // 创建一个空的红黑树
    // myproc process1, process2, process3;

    // init_process(&process1, 1, "1", DEFAULT_PRIORITY);
    // init_process(&process2, 2, "2", DEFAULT_PRIORITY);
    // init_process(&process3, 3, "3", DEFAULT_PRIORITY);
    // process1.task.pid = 1;
    // process2.task.pid = 2;
    // process3.task.pid = 3;
    // printf("init success\n");
    

    // struct cfs_node node1, node2, node3;
    // cfs_node_init(&node1, &process1);
    // cfs_node_init(&node2, &process2);
    // cfs_node_init(&node3, &process3);

    // printf("node create success\n");

    // node1.vruntime = 1024;
    // node2.vruntime = 512;
    // node3.vruntime = 2048;

    // // 插入节点到红黑树中
    // cfs_insert(&cfs_tree, &node1);
    // cfs_insert(&cfs_tree, &node2);
    // cfs_insert(&cfs_tree, &node3);
    // printf("node insert success\n");

    // // 测试搜索功能
    // struct cfs_node *found_node = cfs_search(&cfs_tree, process2.task.pid);
    // if (found_node != NULL) {
    //     printf("Node with PID %d found.\n", process2.task.pid);
    // } else {
    //     printf("Node with PID %d not found.\n", process2.task.pid);
    // }

    // // 测试删除功能
    // if (cfs_remove_process(&cfs_tree, &process3)) {
    //     printf("Node with PID %d removed successfully.\n", process3.task.pid);
    // } else {
    //     printf("Failed to remove node with PID %d.\n", process3.task.pid);
    // }
	// print_cfs_scheduler(&cfs_tree);

    // // 测试调度功能
    // myproc *next_process = cfs_schedule_next(&cfs_tree);
    // if (next_process != NULL) {
    //     printf("Next myproc to be executed: %s\n", next_process->task.p_name);
    // } else {
    //     printf("No myproc found for scheduling.\n");
    // }
	
	// // 测试update
	// print_cfs_scheduler(&cfs_tree);
	// cfs_update_vruntime(&cfs_tree, &node3, 100);
	// print_cfs_scheduler(&cfs_tree);

    return 0;
}
